// axios二次封装
import axios from 'axios'
import { Loading, message } from 'element-ui'
import { getToken } from '_utils/token'
import router from '../router'
import store from '../store'
const request = axios.create({
  baseURL: process.env.VUE_APP_BASEURL,
  timeout: 6000
})
// 拦截器
let loading = {}
request.interceptors.request.use(function (config) {
  // 显示loading
  loading = Loading.service({
    lock: true,
    text: '奋力加载中...',
    spinner: 'el-icon-loading',
    background: 'rgba(0, 0, 0, 0.7)'
  })
  // 在请求头中添加token 进行接口鉴权
  const token = getToken()
  if (token) {
    config.headers.token = token
  }
  return config
}, function (error) {
  loading.close()
  return Promise.reject(error)
})

request.interceptors.response.use(function (res) {
  // 判断 code 判断token是否过期 或者 没有登录
  if (res.data.code === 401 || res.data.code === 403) {
    // token过期 或者 未登录
    message.error({
      type: 'error',
      message: '登录状态过期或者未登录',
      duration: 1500,
      onClose () {
        // 清除缓存
        store.commit('user/CLEAR_USER_INFO')
        // 去登录页
        router.push('/login')
      }
    })
  }
  loading.close()
  return res
}, function (error) {
  loading.close()
  return Promise.reject(error)
})

export default request
